use HeThongSim
go
-- Khách Hàng Tìm Kiếm
alter proc usp_TimKiem 
	@sothuebao varchar(11) = null, 
	@giatu float = null, 
	@giaden float = null , 
	@loaisim nvarchar(30) = null, 
	@nhamang nvarchar(10) = null
	
as
	begin tran
		declare @ThueBao varchar(13)
		set @ThueBao = '%' + @sothuebao + '%'
		--xuat so luong ket qua
		select count(*)
		from Sim s join Sim_LoaiSim sls on s.MaSanPham  = sls.MaSanPham 
		join  LoaiSim ls on sls.MaLoaiSim = ls.MaLoaiSim 
		join SanPham sp on sp.MaSanPham = s.MaSanPham 
		join NhaMang nm on nm.MaNhaMang = sp.MaNhaMang 
		where (s.SoThueBao like @ThueBao or @sothuebao is null) 
		and (sp.DonGia >=  @giatu  or @giatu is null )
		and (sp.DonGia >=  @giaden or @giaden is null )
		and (ls.TenLoaiSim like @loaisim or @loaisim is null) 
		and (nm.TenNhaMang like @nhamang or @nhamang is null)
		and (sp.TinhTrang like N'Đang bán')
		waitfor delay '0:0:10'
		--xuat danh sach ket qua
		select s.*,sp.DonGia, ls.TenLoaiSim, nm.TenNhaMang
		from Sim s join Sim_LoaiSim sls on s.MaSanPham  = sls.MaSanPham 
		join  LoaiSim ls on sls.MaLoaiSim = ls.MaLoaiSim 
		join SanPham sp on sp.MaSanPham = s.MaSanPham 
		join NhaMang nm on nm.MaNhaMang = sp.MaNhaMang 
		where (s.SoThueBao like @ThueBao or @sothuebao is null) 
		and (sp.DonGia >=  @giatu  or @giatu is null )
		and (sp.DonGia >=  @giaden or @giaden is null )
		and (ls.TenLoaiSim like @loaisim or @loaisim is null) 
		and (nm.TenNhaMang like @nhamang or @nhamang is null)
		and (sp.TinhTrang like N'Đang bán')
	commit tran
go
-- Nhân Viên Cập Nhật Sim
alter procedure usp_CapNhatSim 
	@MaSanPham int,
	@SoThueBao char(11) = null, 
	@SoSeri char(20) = null, 
	@DonGia float = null, 
	@MaLoaiSim int = null, 
	@MaNhaMang int = null ,
	@TinhTrang nvarchar(20) = null
as
begin
	begin tran
		--Kiểm tra sản phẩm có tồn tại hay không
		if(not exists(select * from Sim where MaSanPham = @MaSanPham))
		begin
			rollback
			return
		end

		--Kiểm tra cập nhật số thuê bao
		declare @error varchar(1000)
		if(@SoThueBao is not null)
		begin
			begin try
				update Sim set SoThueBao = @SoThueBao where MaSanPham = @MaSanPham
			end try
			begin catch
				set @error = N'Lỗi: ' + error_message()
				raiserror (@error,16,1)
				rollback tran
				return
			end catch
		end

		--Kiểm tra cập nhật số seri
		if(@SoSeri is not null)
		begin
			begin try
				update Sim set SoSeri = @SoSeri where MaSanPham = @MaSanPham
			end try
			begin catch
				set @error = N'Lỗi: ' + error_message()
				raiserror (@error,16,1)
				rollback tran
				return
			end catch
		end

		--Kiểm tra số lượng sim
		if(@SoThueBao is not null and @SoSeri is not null)
			if((select count(MaSanPham) from Sim  where SoThueBao like @SoThueBao and SoSeri like @SoSeri ) > 1)
			begin
				rollback tran
				return
			end

		--Kiểm tra cập nhật đơn giá
		if(@DonGia is not null)
		begin
			begin try
				update SanPham set DonGia = @DonGia where MaSanPham = @MaSanPham
			end try
			begin catch
				set @error = N'Lỗi: ' + error_message()
				raiserror (@error,16,1)
				rollback tran
				return
			end catch
		end

		--Kiểm tra cập nhật loại sim
		if(@MaLoaiSim is not null)
		begin
			begin try
				update Sim_LoaiSim  set MaLoaiSim = @MaLoaiSim where MaSanPham = @MaSanPham
			end try
			begin catch
				set @error = N'Lỗi: ' + error_message()
				raiserror (@error,16,1)
				rollback tran
				return
			end catch
		end

		--Kiểm tra cập nhật nhà mạng
		if(@MaNhaMang is not null)
		begin
			begin try
				update SanPham set MaNhaMang = @MaNhaMang where MaSanPham = @MaSanPham
			end try
			begin catch
				set @error = N'Lỗi: ' + error_message()
				raiserror (@error,16,1)
				rollback tran
				return
			end catch
		end

		--Kiểm tra cập nhật tình trạng
		if(@TinhTrang is not null)
		begin
			begin try
				update SanPham set TinhTrang = @TinhTrang where MaSanPham = @MaSanPham
			end try
			begin catch
				set @error = N'Lỗi: ' + error_message()
				raiserror (@error,16,1)
				rollback tran
				return
			end catch
		end
	commit tran
end
go